package com.zhang.a_simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import org.junit.Test;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class A_producer {

    @Test
    public void test1() throws IOException, TimeoutException {
        //1.创建Connection
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("192.168.200.114");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
        Connection connection = factory.newConnection();

        //2.创建channel
        Channel channel = connection.createChannel();

        //3.创建交换机(这里使用的是默认交换机 AMQP_Default)

        //4.创建队列
        /**
         *  第一个参数queue：队列名称
         *  第二个参数durable：否持久化(持久化到硬盘,重启后还在)
         *  第三个参数Exclusive：排他队列，如果一个队列被声明为排他队列，该队列仅对首次声明它的连接可见，并在连接断开时自动删除。
         *      这里需要注意三点：
         *          1. 排他队列是基于连接可见的，同一连接的不同通道是可以同时访问同一个连接创建的排他队列的。
         *          2. "首次"，如果一个连接已经声明了一个排他队列，其他连接是不允许建立同名的排他队列的，这个与普通队列不同。
         *          3. 即使该队列是持久化的，一旦连接关闭或者客户端退出，该排他队列都会被自动删除的。
         *          这种队列适用于只限于一个客户端发送读取消息的应用场景。
         *  第四个参数Auto-delete：是否自动删除(当没有消费者监听后就自动删除)
         */
        channel.queueDeclare("q1",true,false,false,null);


        //5.交换机与队列绑定(指定路由key)


        //6.发送消息
        /**
         *  第一个参数exchange：交换机名称
         *  第二个参数routingKey： 路由key (这里的路由key就是队列名)
         *  第三个参数props：参数
         *  第四个参数body: 发送的消息
         */
        channel.basicPublish("","q1",null,"hello boy ...".getBytes());

        //7.释放资源(不用手动释放,因为Connection继承了Closeable,它会自动关闭)

    }
}






